其實一直很猶豫要不要寫這篇,因為 UI Framework 最終還是要從官方文件去看使用方式。
但又想起當初,自己一開始使用 Quasar 的時候,進入官網那種迷失的感覺XD,常常找不到東西在哪裡,也看不懂元件文件(可能因為太菜...),所以...我想還是有一些資訊可以先提供給初入 Quasar 的 Vue 3 新手。
所以今天這篇的目標是:幫助第一次使用 Quasar 的人,快速認識 Quasar 提供的功能,還有讀懂 Quasar 的元件文件。
:deep()
Quasar 是一套基於 vue.js 開發的強大 UI framework,就像積木一樣,把所有元件素材都提供給開發者,讓開發者可以組裝出自己需要的元件。
先前已經使用 Vue 官方的 Project Scaffolding 建立專案,所以這次選擇的是「Vite plugin for Quasar」,將 Quasar 插件安裝到現成的 Vue + Vite 專案上。
而 Quasar CLI 是 Quasar 提供的 Project Scaffolding,可以快速建立使用 Quasar 的 Vue 專案,會協助安裝開發所需的工具:CSS 預處理器、Vite/Vue CLI、ESLint、狀態管理器(Pinia/Vuex)、axios 和 Vue-i118n,指令為 npm init quasar
。
註:Vite plugin 的形式不支援 SSR,SSR 專案建議使用 Quasar CLI with Vite。
npm install quasar @quasar/extras
npm install -D @quasar/vite-plugin sass@1.32.12
yarn add quasar @quasar/extras
yarn add -D @quasar/vite-plugin sass@1.32.12
quasar
一定要安裝@quasar/extras
Optional,主要支援 icon 和動畫(Animate.css),包含 Google 的 Material Icons、Font Awesome、Bootstrap Icons 等等,可以在這裡 看到可取引用的列表。sass@1.32.12
欲使用 Quasar Sass/SCSS 變數應安裝Quasar 官網上可以根據專案需求,產生引入和 config 檔案(也就是 main.js
和 vite.config.js
的部份)
<q-btn>
)myApp.use(Quasar, {
plugins: {},
/* ~~Quasar Config Object~~
config: {
brand: {
// primary: '#e46262',
// ... other brand colors
},
notify: {...}, // default set of options for Notify Quasar plugin
loading: {...}, // default set of options for Loading Quasar plugin
loadingBar: { ... }, // settings for LoadingBar Quasar plugin
}
*/
})
將產生的程式碼貼到 main.js
和 vite.config.js
內,就可以輕鬆使用 Quasar。
常用分類
.row
、.col
在安裝和引入都設定好後,就可以直接在模板使用 Quasar 元件,不需要在個別 .vue
檔引入其他東西。
<template>
<QInput />
</template>
注意:autoImportComponentCase 預設值為 kebab,我自己習慣使用 pascal(大駝峰),所以引入 Quasar 元件都是使用大駝峰的命名方式。
讓我們用 QInput 來示範!
QInput 就是 Quasar 幫我們包好的 Input 元件,裡面已經定義好 prop、emit、slot,需要根據這些規則去調整元件的樣式或功能。
在 QInput 的元件上可以看到:
model-value
@update:model-value -> function(value)
function(value)
表示 handler 可以接到一個 value
參數,為更新的 value 值這兩項合起來其實就是 v-model 搭配元件的用法,所以要雙向綁定 QInput 的值有兩種寫法:
<template>
<QInput ref="qInput" v-model="name" />
<QInput
ref="qInput"
:model-value="name"
@update:model-value="(newValue) => (name = newValue)"
/>
<p>{{ name }}</p>
</template>
元件預先留的 named slot 或 default slot 區塊。
以 QInput 為例,Quasar 預留了 10 個 slot 位置,可以自訂模板塞入這些區塊,可以搭 Quasar 的 ICon 等等,以下圖示範 before、prepend、label、append 和 after 的位置:
實際運用案例:
比較特別的是,部份 Quasar 元件內部會有定義好的 method 和 computed,那我們要怎麼拿來用呢?
我們可以透過 ref
屬性,取得 QInput 的元件實例,從元件實例(物件型別)中,可以取到內部的 method 和 computed 屬性。
以 QInput 為例,Quasar 有定義一個 method 為 focus () => void 0
和一個 computed 屬性為hasError
。
<template>
<QInput ref="qInput" v-model="name"/>
</template>
import { onMounted, ref } from "vue";
const qInput = ref(null);
const name = ref("");
// 加上這行會報錯,因為元件還沒掛載上去,qInput 還是 `null`
console.log(qInput.value.focus);
// 等到完成掛載,就能取到元件實例下的屬性
onMounted(() => console.log(qInput.value.focus));
onMounted(() => console.log(qInput.value.hasError));
// 等到元件掛載完成,呼叫 quasar 元件的方法來 focus 輸入框
onMounted(() => qInput.value.focu());
小複習:ref
特殊屬性
script
宣告的變數同名,就可以在 script 取得元件實例或 DOM使用自己包的元件時,樣式通常會很符合專案的風格,比較不需要在引用時去調整元件的樣式。
但使用 UI framework 的元件時,到底該怎麼改,才不會影響到全部引用的元件呢?
template 架構
<QInput v-model="name" label="姓名" />
渲染結果
先開 devtool 看要蓋的樣式選擇器是什麼
<style>
不加 scoped:
<style>
.q-field__label {
color: #e74c3c;
}
</style>
<style scoped>
:
:deep()
選擇器<style scoped>
:deep(.q-field__label) {
color: #e74c3c;
}
</style>
Quasar 的元件內建各~種~功能和樣式提供開發者做選擇,沒辦法一次看完全部,要在開發時善用關鍵字搜尋。通常,你想要的功能 Quasar 都有,只是有沒有找到說明的地方而已哈哈。
一開始對 Quasar 元件文件還不熟悉的時候,會覺得用得很不順手,等到熟悉之後,就會發現 Quasar 真的很好用,好用到自我懷疑...懷疑自己究竟能不能實作出 Quasar 元件的某些功能 QQ
今天先到這裡,30 天竟然快結束了,好猶豫明天最後要寫什麼呀...